package com.csb.controller;

import com.csb.config.MyConstants;
import com.csb.pojo.*;
import com.csb.service.AssetService;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/asset")
public class AssetController {
    // 依赖
    @Autowired
    private AssetService assetService;

    /**
     * 按页码查询资产信息
     *
     * @param utils
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping("/init")
    public Map<String, Object> init(Integer pageNo, Integer pageSize, Utils utils) {
        // 创建Map,存储各种条件
        Map<String, Object> cond = new HashMap<>();
        // 存储偏移量
        cond.put("offset", (pageNo - 1) * pageSize);
        // 存储每页的大小
        cond.put("pageSize", pageSize);
        // 存储条件查询的条件
        if (!utils.getAsIdQuery().equals("null")&&utils.getAsIdQuery().length()>0){
            // 添加资产编号
            cond.put("asIdQuery", utils.getAsIdQuery());
        }
        if (!utils.getAsSpecQuery().equals("null")&&utils.getAsSpecQuery().length()>0){
            // 添加资产型号
            cond.put("asSpecQuery", utils.getAsSpecQuery());
        }
        // 添加资产状态
        if ("待用".equals(utils.getAsStateQuery())){
            cond.put("asStateQuery", 1);
        }else if ("申请中".equals(utils.getAsStateQuery())){
            cond.put("asStateQuery", 2);
        }else if ("在用".equals(utils.getAsStateQuery())){
            cond.put("asStateQuery", 3);
        }
        if (!utils.getAsDateStart().equals("null")&&utils.getAsDateStart().length()>0){
            // 获取要查询开始购买日期
            cond.put("asDateStart",utils.getAsDateStart());
        }
        if (!utils.getAsDateEnd().equals("null")&&utils.getAsDateEnd().length()>0){
            // 获取要查询结束购买日期
            cond.put("asDateEnd",utils.getAsDateEnd());
        }
        if (utils.getClassifyId()!=null){
            // 获取要查询资产分类
            cond.put("classifyId",utils.getClassifyId());
        }
        // 创建Map,存储查询结果及本次查询的总资产数
        Map<String, Object> map = new HashMap<>();
        // 获取本页的固定资产信息
        List<AssetInfo> assetList = assetService.getAssetInfoWithPage(cond);
        // 存储本页的资产信息
        map.put("rows", assetList);
        // 获取本次查询的总资产数
        int count = assetService.getAssetCount(cond);
        // 存储本次查询的总资产数
        map.put("total", count);
        // 返回
        return map;
    }

    @RequestMapping("/person")
    public List<AssetInfo> person() {
        // 获取账号
        UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal();
        // 获取本页的固定资产信息
        List<AssetInfo> assetList = assetService.getAssetInfo(userInfo.getAccount());
        return assetList;
    }
    /**
     * 添加信息前名称的验证
     *
     * @param asId
     * @return
     */
    @RequestMapping("/chkAsId")
    public String chkAsId(String asId) {
        // 根据资产编号去查询
        boolean bol = assetService.ifExistsAsId(asId);
        // 判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }

    /**
     * 添加资产信息
     *
     * @param assetInfo
     * @return
     */
    @RequestMapping("/add")
    public String add(AssetInfo assetInfo) {
        // 根据资产信息添加
        boolean bol = assetService.saveAssetInfo(assetInfo);
        // 判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }

    /**
     * 根据资产内部编号,将资产信息设置为故障
     *
     * @param assetInfo
     * @return
     */
    @RequestMapping("/del")
    public String del(AssetInfo assetInfo) {
        // 将资产状态设置为故障
        assetInfo.setIsBreak(MyConstants.ASSET_IS_BREAK_YES);
        // 根据资产编号去设置
        boolean bol = assetService.delAssetInfo(assetInfo);
        // 判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }

    /**
     * 根据资产内部编号,将资产信息批量设置为故障
     *
     * @param ids
     * @return
     */
    @RequestMapping("/batchDel")
    public String batchDel(String[] ids) {
        // 声明AssetInfo对象
        AssetInfo assetInfo = new AssetInfo();
        // 将资产状态设置为故障
        assetInfo.setIsBreak(MyConstants.ASSET_IS_BREAK_YES);
        // 根据资产编号去设置
        boolean bol = assetService.batchDelAssetInfo(ids, assetInfo);
        //判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }

    /**
     * 根据资产内部编号,修改资产信息
     *
     * @param assetInfo
     * @return
     */
    @RequestMapping("/modify")
    public String modify(AssetInfo assetInfo) {
        // 根据资产编号去修改
        boolean bol = assetService.modifyAssetInfo(assetInfo);
        // 判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }

    /**
     * 将资产折旧
     * @return
     */
    @RequestMapping("/depreciation")
    public String depreciation(){
        // 根据资产编号去修改
        boolean bol = assetService.depreciation(MyConstants.ASSET_ASSTATE_WORTHLESS);
        // 判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }

    /**
     * 获取不可用资产一览
     * @return
     */
    @RequestMapping("/worthless")
    public List<Apply> worthless(){
        // 根据资产状态去查找
        return assetService.getWorthLessAssetList(MyConstants.ASSET_ASSTATE_WORTHLESS,MyConstants.ASSET_IS_BREAK_YES);
    }

    /**
     * 获取资产占比
     * @return
     */
    @RequestMapping("/assetTypesRate")
    public List<AssetTypesRate> assetTypesRate(){
        return assetService.getAssetTypesRate();
    }

    /**
     * 根据资产内部编号,修改资产信息
     *
     * @param assetInfo
     * @return
     */
    @RequestMapping("/maintain")
    public String maintain(AssetInfo assetInfo) {
        // 根据资产编号去修改
        boolean bol = assetService.maintainAssetInfo(assetInfo);
        // 判断
        if (bol) {
            return "1";
        } else {
            return "0";
        }
    }
}
